package beans.cadastro.operacional;

import java.util.Collections;
import java.util.Date;
import java.util.List;
import javax.faces.component.UICommand;
import javax.persistence.EntityExistsException;
import javax.persistence.Query;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import pojo.cadastro.operacional.Fornecedor;

public class FornecedorBean {

    @PersistenceContext
    private EntityManager mgr;

    // pojo
    private long id;
    private String razaoSocial;
    private String fantasia;
    private String cnpj;
    private String endereco;
    private int numero;
    private String complemento;
    private String dddTelComercial;
    private String telComercial;
    private String dddTelCelular;
    private String telCelular;
    private String dddTelFax;
    private String telFax;

    // Campos de Pesquisa
    private String razaoSocialPesq;
    private String cnpjPesq;

    // listas
    private List<Fornecedor> listaFornecedores;

    // botoes de comandos
    private UICommand btnAlterar;
    private UICommand btnExcluir;

    public FornecedorBean() {
    }

    public String pesquisar() {
        carregar();
        return "pesquisa";
    }

    public String retornar() {
        return "pesquisa";
    }

    public String carregar() {

        listaFornecedores = Collections.EMPTY_LIST;
        String sql = "SELECT f FROM Fornecedor f WHERE f.id IS NOT NULL ";
        if (!this.razaoSocialPesq.equals(""))
            sql += "AND f.razaoSocial LIKE :razaoSocialPesq ";
        if (!this.cnpjPesq.equals(""))
            sql += "AND f.cnpj LIKE :cnpjPesq ";
        sql += "ORDER BY f.razaoSocial";

        mgr = Persistence.createEntityManagerFactory("lojaPU").createEntityManager();
        Query q1 = mgr.createQuery(sql);

        if (!this.razaoSocialPesq.equals(""))
            q1.setParameter("razaoSocialPesq", "%"+this.razaoSocialPesq+"%");
        if (!this.cnpjPesq.equals(""))
            q1.setParameter("cnpjPesq", "%"+this.cnpjPesq+"%");

        listaFornecedores = q1.getResultList();
        mgr.close();

        return null;
    }

    public String salvar() {
        Fornecedor f = new Fornecedor();

        if (id != 0) {
            f.setId(id);
        }

        f.setRazaoSocial(razaoSocial);
        f.setFantasia(fantasia);
        f.setCnpj(cnpj);
        f.setEndereco(endereco);
        f.setNumero(numero);
        f.setComplemento(complemento);
        f.setTelComercial(telComercial);
        f.setTelCelular(telCelular);
        f.setTelFax(telFax);
        f.setDataCadastro(new Date(System.currentTimeMillis()));

        mgr = Persistence.createEntityManagerFactory("lojaPU").createEntityManager();
        mgr.getTransaction().begin();
        try {
            if (f.getId() == 0) {
                mgr.persist(f);
            } else {
                mgr.merge(f);
            }
            mgr.getTransaction().commit();
        } catch (EntityExistsException e) {
            mgr.getTransaction().rollback();
        } finally {
            mgr.close();
        }

        listaFornecedores = Collections.EMPTY_LIST;

        return "pesquisa";
    }

    public String incluir() {
        id = 0;
        razaoSocial = "";
        fantasia = "";
        cnpj = "";
        endereco = "";
        numero = 0;
        complemento = "";
        dddTelComercial = "";
        telComercial = "";
        dddTelCelular = "";
        telCelular = "";
        dddTelFax = "";
        telFax = "";

        return "cadastro";
    }

    public String alterar() {
        mgr = Persistence.createEntityManagerFactory("lojaPU").createEntityManager();
        Fornecedor f = mgr.find(Fornecedor.class, Long.parseLong(btnAlterar.getValue().toString()));

        id = f.getId();
        razaoSocial = f.getRazaoSocial();
        fantasia = f.getFantasia();
        cnpj = f.getCnpj();
        endereco = f.getEndereco();
        numero = f.getNumero();
        complemento = f.getComplemento();
        telComercial = f.getTelComercial();
        telCelular = f.getTelCelular();
        telFax = f.getTelFax();
        
        return "cadastro";
    }

    public String excluir() {
        mgr = Persistence.createEntityManagerFactory("lojaPU").createEntityManager();
        Fornecedor f = mgr.find(Fornecedor.class, Long.parseLong(btnExcluir.getValue().toString()));

        mgr.getTransaction().begin();
        try {
            mgr.remove(f);
            mgr.getTransaction().commit();
        } catch (EntityExistsException e) {
            mgr.getTransaction().rollback();
        } finally {
            mgr.close();
        }
        carregar();

        return null;
    }

    // Getters and Setters
    
    public UICommand getBtnAlterar() {
        return btnAlterar;
    }

    public void setBtnAlterar(UICommand btnAlterar) {
        this.btnAlterar = btnAlterar;
    }

    public UICommand getBtnExcluir() {
        return btnExcluir;
    }

    public void setBtnExcluir(UICommand btnExcluir) {
        this.btnExcluir = btnExcluir;
    }

    public String getCnpj() {
        return cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    public String getCnpjPesq() {
        return cnpjPesq;
    }

    public void setCnpjPesq(String cnpjPesq) {
        this.cnpjPesq = cnpjPesq;
    }

    public String getComplemento() {
        return complemento;
    }

    public void setComplemento(String complemento) {
        this.complemento = complemento;
    }

    public String getDddTelCelular() {
        return dddTelCelular;
    }

    public void setDddTelCelular(String dddTelCelular) {
        this.dddTelCelular = dddTelCelular;
    }

    public String getDddTelComercial() {
        return dddTelComercial;
    }

    public void setDddTelComercial(String dddTelComercial) {
        this.dddTelComercial = dddTelComercial;
    }

    public String getDddTelFax() {
        return dddTelFax;
    }

    public void setDddTelFax(String dddTelFax) {
        this.dddTelFax = dddTelFax;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public String getFantasia() {
        return fantasia;
    }

    public void setFantasia(String fantasia) {
        this.fantasia = fantasia;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public List<Fornecedor> getListaFornecedores() {
        return listaFornecedores;
    }

    public void setListaFornecedores(List<Fornecedor> listaFornecedores) {
        this.listaFornecedores = listaFornecedores;
    }

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public String getRazaoSocial() {
        return razaoSocial;
    }

    public void setRazaoSocial(String razaoSocial) {
        this.razaoSocial = razaoSocial;
    }

    public String getRazaoSocialPesq() {
        return razaoSocialPesq;
    }

    public void setRazaoSocialPesq(String razaoSocialPesq) {
        this.razaoSocialPesq = razaoSocialPesq;
    }

    public String getTelCelular() {
        return telCelular;
    }

    public void setTelCelular(String telCelular) {
        this.telCelular = telCelular;
    }

    public String getTelComercial() {
        return telComercial;
    }

    public void setTelComercial(String telComercial) {
        this.telComercial = telComercial;
    }

    public String getTelFax() {
        return telFax;
    }

    public void setTelFax(String telFax) {
        this.telFax = telFax;
    }
}